/*******************************************************************************
 * 
 * Copyright:
 * 
 * License:
 * 
 * Authors:
 * 
 ******************************************************************************/

/*****************************************************************************
 #asset(mutual/*)
******************************************************************************/

/**
 * This is the main application class of your custom application "mutual"
 */
qx.Class.define("mutual.Application", {
			extend : qx.application.Standalone,

			/*
			 * ****************************************************************************
			 * MEMBERS
			 * ****************************************************************************
			 */

			members : {
				/**
				 * This method contains the initial application code and gets
				 * called during startup of the application
				 * 
				 * @lint ignoreDeprecated(alert)
				 */
				main : function() {
					// Call super class
					this.base(arguments);

					// Enable logging in debug variant
					if (qx.core.Environment.get("qx.debug")) {
						// support native logging capabilities, e.g. Firebug for
						// Firefox
						qx.log.appender.Native;
						// support additional cross-browser console. Press F7 to
						// toggle visibility
						qx.log.appender.Console;
					}
					
					// Agregamos los controles al doc (Despues se cambia el contenedor)
					var doc = this.getRoot();
					doc.add(this.getMenuBar(),{left: 0, top: 0, right:0});
				},
				getMenuBar : function(){
				      var frame = new qx.ui.container.Composite(new qx.ui.layout.Grow);
				      frame.setDecorator("main");
				
				      var toolbar = new qx.ui.toolbar.ToolBar;
				      frame.add(toolbar);
				
				      var menuPart = new qx.ui.toolbar.Part;
				      var model = null;
					  var dataFindCriteria = null;
				
				      toolbar.add(menuPart);
					  var grpApps = new qx.ui.container.Composite();
					  grpApps.setLayout(new qx.ui.layout.Basic());
				      var btnGestionPlanes = new qx.ui.toolbar.MenuButton("Gestión de Planes", "mutual/newPlan_22.png");
				      btnGestionPlanes.addListener("execute", function(){
				      	grpApps.removeAll();
						grpApps.add(this.getPlanesModule(model, dataFindCriteria));
				      }, this)
				      var btnGestionPersonas = new qx.ui.toolbar.MenuButton("Gestión de Personas", "mutual/newPersona_22.png");
				      btnGestionPersonas.addListener("execute", function(){
				      	grpApps.removeAll();
						grpApps.add(this.getPersonasModule(model, dataFindCriteria));
				      }, this)
				      var btnGestionAsignaciones = new qx.ui.toolbar.MenuButton("Asignación de Planes y Beneficiarios", "mutual/newAsignacion_22.png");
				      btnGestionAsignaciones.addListener("execute", function(){
				      	grpApps.removeAll();
						grpApps.add(this.getAsignacionesModule());
				      }, this)
				      
				      this.getRoot().add(grpApps, {left : 20,top : 30});
				
				      menuPart.add(btnGestionPersonas);
				      menuPart.add(btnGestionPlanes);
				      menuPart.add(btnGestionAsignaciones);
				
				      return frame;
				},
				
				getPersonasModule : function(model, dataFindCriteria){
						/* _______________________ ABM PERSONAS _______________________ */
						// cargamos el modelo del grid
						model = {
							fields : ["id", "Nº Control", "Nombre", "Apellido"], 
							titles : ["id_persona", "nro_control1", "nombre", "apellido"]
						};
						// cargamos los criterios de busqueda
						dataFindCriteria = {
							names : (["Buscar por Nombre", "Buscar por Apellido","Buscar por Dni"]),
							operators : (["like", "like", "="]),
							values : (["nombre", "apellido", "dni"])
						}
						// inicializamos el form
						var abmPersonas = new mutual.abm(model, function(criteria) {
									var param = {
										criteria : criteria
									}
									var rpc = new qx.io.remote.Rpc("services/","mutual.Persona");
									var personas = rpc.callSync("getPersonas",param);
									if (personas) {
										return personas;
									} else {
										return "";
									}
								}, dataFindCriteria);
						abmPersonas.setWidth(500);
						abmPersonas.tblGrid.getTableColumnModel().setColumnWidth(1, 80);
						abmPersonas.tblGrid.getTableColumnModel().setColumnWidth(2, 150);
						abmPersonas.tblGrid.getTableColumnModel().setColumnWidth(3, 200);
						// seteamos los eventos que se disparan con las acciones del abm
						abmPersonas.initForm = function(nuevo) {
							var frm = null;
							if (nuevo) {
								frm = new mutual.formPersona();
							} else {
								var idPersona = abmPersonas.getSelectedId();
								if (!idPersona){
									alert("Debe seleccionar una persona");
									return;
								}
								frm = new mutual.formPersona(idPersona);
							}
							abmPersonas.hide();
							frm.setWidth(300);
							// se dispara una vez que se persisten los datos del
							frm.persistSuccess = function() {
								abmPersonas.loadGrid();
								abmPersonas.show();
							};
							frm.addListener("cancelar", function() {
										abmPersonas.show();
									}, this);
							this.add(frm);
						};
	
						abmPersonas.deleteAction = function() {
							var idPersona = this.getSelectedId();
							if (!idPersona){
								alert("Debe seleccionar una persona");
								return;
							}
							if (!confirm("¿Esta seguro que desea borrar este registro?")) {
								return;
							}
							var rpc = new qx.io.remote.Rpc("services/",
									"mutual.Persona");
							var response = rpc.callSync("deletePersona", idPersona);
	
							abmPersonas.loadGrid();
						};
						abmPersonas.tblGrid.getTableColumnModel().setColumnVisible(0, false);
						abmPersonas.tblGrid.setHeight(250);
						
						return abmPersonas;
				},
				
				getPlanesModule : function (model, dataFindCriteria){
						// cargamos el modelo del grid
						model = {
							fields: ["id", "Nombre", "Precio Cuota", "Cant. Benef/Aseg"], 
							titles: ["id_plan", "nombre", "precio_cuota", "cantidad_beneficiarios"]
						};
						// cargamos los criterios de busqueda
						dataFindCriteria = {
							names : (["Buscar por Nombre"]),
							operators : (["like"]),
							values : (["nombre"])
						}
						// inicializamos el form
						var abmPlanes = new mutual.abm(model, function(criteria) {
									var param = {
										criteria : criteria
									}
									var rpc = new qx.io.remote.Rpc("services/","mutual.Plan");
									var planes = rpc.callSync("getPlanes",
											param);
									if (planes) {		
										return planes;
									} else {
										return "";
									}
								}, dataFindCriteria);
						abmPlanes.setWidth(500);
						abmPlanes.tblGrid.getTableColumnModel().setColumnWidth(1, 250);
						abmPlanes.tblGrid.getTableColumnModel().setColumnWidth(2, 100);
						abmPlanes.tblGrid.getTableColumnModel().setColumnWidth(3, 100);
						// seteamos los eventos que se disparan con las acciones del
						abmPlanes.initForm = function(nuevo) {
							var frm = null;
							if (nuevo) {
								frm = new mutual.formPlan();
							} else {
								var idPlan = abmPlanes.getSelectedId();
								if (!idPlan){
									alert("Debe seleccionar un plan");
									return;
								}
								frm = new mutual.formPlan(idPlan);
							}
							abmPlanes.hide();
							frm.setWidth(400);
							// se dispara una vez que se persisten los datos del
							frm.persistSuccess = function() {
								abmPlanes.loadGrid();
								abmPlanes.show();
							};
							frm.addListener("cancelar", function() {
										abmPlanes.show();
									}, this);
							this.add(frm);
						};
	
						abmPlanes.deleteAction = function() {
							var idPlan = this.getSelectedId();
							if (!idPlan){
								alert("Debe seleccionar un plan");
								return;
							}
							if (!confirm("¿Esta seguro que desea borrar este registro?")) {
								return;
							}
							var rpc = new qx.io.remote.Rpc("services/",
									"mutual.Plan");
							var response = rpc.callSync("deletePlan", idPlan);
	
							abmPlanes.loadGrid();
						};
						abmPlanes.tblGrid.getTableColumnModel().setColumnVisible(0, false);
						abmPlanes.tblGrid.setHeight(250);
						
						return abmPlanes;
				},
				
				getAsignacionesModule : function(){
					/* _______________________ ASOCIACION _______________________ */
					var frmAsignacion = new mutual.formAsignacion();
					frmAsignacion.setWidth(900);
					return frmAsignacion;
				}
			}
		});
